
package com.jf.cloud.supplier.mapper;

import com.jf.cloud.supplier.dto.SupplierWalletLogSearchDTO;
import com.jf.cloud.supplier.model.SupplierWallet;
import com.jf.cloud.supplier.vo.SupplierWalletVO;
import com.jf.cloud.supplier.vo.SupplierWalletZoneInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 供应商钱包信息
 *
 * @author zz
 * @date 2022-03-14 17:04:32
 */
public interface SupplierWalletMapper {


    /**
     * 获取商家钱包信息列表
     *
     * @return 商家钱包信息列表
     */
    List<SupplierWallet> list();

    /**
     * 根据商家钱包信息id获取商家钱包信息
     *
     * @param supplierWalletId 商家钱包信息id
     * @return 商家钱包信息
     */
    SupplierWallet getBySupplierWalletId(@Param("supplierWalletId") Long supplierWalletId);

    /**
     * 保存商家钱包信息
     *
     * @param supplierWallet 商家钱包信息
     */
    void save(@Param("supplierWallet") SupplierWallet supplierWallet);

    /**
     * 更新商家钱包信息
     *
     * @param supplierWallet 商家钱包信息
     * @return int
     */
    int update(@Param("supplierWallet") SupplierWallet supplierWallet);

    /**
     * 根据供应商id获取钱包信息
     *
     * @param supplierId 供应商id
     * @return 钱包信息
     */
    SupplierWalletVO getBySupplierId(@Param("supplierId") Long supplierId);

    /**
     * 给商家钱包，添加未结算金额
     *
     * @param supplierId 供应商id
     * @param changeAmount
     * @return
     */
    int addUnsettledAmount(@Param("supplierId") Long supplierId, @Param("changeAmount") Long changeAmount);

    /**
     * 给供应商钱包，添加结算金额
     *
     * @param supplierId 供应商id
     * @param settledAmount
     * @return
     */
    int addSettledAmount(@Param("supplierId") Long supplierId, @Param("settledAmount") Long settledAmount);

    /**
     * 给供应商钱包，减少结算金额
     *
     * @param supplierId 供应商id
     * @param settledAmount
     * @return
     */
    int subSettledAmount(@Param("supplierId") Long supplierId, @Param("settledAmount") Long settledAmount);

    /**
     * 锁定未结算金额
     *
     * @param supplierId
     * @param supplierRealRefundAmount
     * @return
     */
    int subUnsettledAmount(@Param("supplierId") Long supplierId, @Param("supplierRealRefundAmount") Long supplierRealRefundAmount);

    /**
     * 提现申请的时候增加冻结金额
     * @param supplierId 供应商id
     * @param changeAmount 冻结金额
     * @return
     */
    int addFreezeAmount(@Param("supplierId") Long supplierId, @Param("changeAmount") Long changeAmount);

    /**
     * 提现申请通过的时候/提现申请被拒绝的时候减少冻结金额
     * @param supplierId 供应商id
     * @param changeAmount 冻结金额
     * @return
     */
    int subFreezeAmount(@Param("supplierId") Long supplierId, @Param("changeAmount") Long changeAmount);

    /**
     * 获取所有商家钱包信息
     * @param supplierWalletLogSearchDTO
     * @return 钱包信息
     */
    SupplierWalletVO getAllSupplier(@Param("supplierWalletLogSearchDTO") SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);

    /**
     * 根据分片数量获取店铺id列表
     * @param zoneNum 分片数量
     * @return
     */
    List<Long> listSupplierIdsByZoneNum(int zoneNum);

    /**
     * 更新钱包分片数量和结算金额
     * @param zoneNum 分成的数量
     * @param supplierId 需要分片的供应商id
     * @param settleAmount 更新的结算金额
     */
    void updateZoneNum(@Param("zoneNum") int zoneNum, @Param("supplierId") Long supplierId, @Param("settleAmount") Long settleAmount);

    /**
     * 获取供应商分片情况
     * @param supplierId 供应商id
     * @return
     */
    SupplierWalletZoneInfoVO getSupplierWalletZoneInfo(@Param("supplierId") Long supplierId);

    /**
     * 获取供应商余额,不含分片
     * @param supplierId 供应商id
     * @return
     */
    Long getSettlementAmountBySupplierId(@Param("supplierId") Long supplierId);

    /**
     * 分页获取供应商钱包
     * @param supplierWalletLogSearchDTO
     * @return
     */
    List<SupplierWalletVO> listAllSupplierWallet(@Param("supplierWalletLogSearchDTO") SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);
}
